﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Elysium.Demo;
using SIIE_ERP.View;
using SIIE_ERP.Codigo;
using SIIE_ERP.BaseDatos;
using System.Data;
using SIIE_ERP.Codigo.Ventas.Honorarios;
using SIIE_ERP.BaseDatos.Ventas.Transacciones;
using System.Globalization;
using SIIE_ERP.BaseDatos.Inventarios.Catalogos;
using ThoughtWorks.QRCode.Codec;
using SIIE_ERP.BaseDatos.Ventas;
using System.Data.OleDb;
using System.IO;
using System.Xml;
using System.Net;
using System.Net.Mail;
using SIIE_FE_Class;
using Elysium.Demo.Informes;

namespace Elysium.Demo.Ventas.Honorarios
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class ReciboHonorarios_Edita : UserControl, IPropiedadesNavegacion
    {
        ////////////////////////////////////////////////////////////////////////////
        //  PROPIEDADES DE NAVEGACION
        public string Texto { get { return _texto; } }
        public TabControl TabControlPadre { get { return _tabControlPadre; } }
        public TabItem TabItemPadre { get { return _tabItemPadre; } }

        private string _texto;
        private TabControl _tabControlPadre;
        private TabItem _tabItemPadre;

        public void setParametros(string Texto, ref TabControl tabControl, ref TabItem tabItem)
        {
            this._texto = Texto; this._tabControlPadre = tabControl; this._tabItemPadre = tabItem;
        }

        private void ButtonRegresar_Click(object sender, RoutedEventArgs e)
        {
            _tabControlPadre.Items.Remove(_tabItemPadre);
        }
        // FIN DE PROPIEDADES DE NAVEGACION
        ///////////////////////////////////////////////////////////////////////////

        private UsuarioActivo _sesion;
        private Int32 Id;

        private double PrecioCostoOriginal;
        private double PrecioMinimoOriginal;
        private Int32 Id_ArticuloActual;

        private double Porc_IVA;
        private double Porc_IVARet;
        private double Porc_ISRRet;

        public ReciboHonorarios_Edita(UsuarioActivo usuario, String Id)
        {
            InitializeComponent();
            this._sesion = usuario;
            this.Id = Int32.Parse(Id);
            CargaCatalogos();
            CargaDatos();
        }

        private void CargaCatalogos()
        {            
            //Sucursales
            ComboBoxUI.ComboSucursales(ref Combo_Sucursal, _sesion, false);
            //Formas de Pago
            ComboBoxUI.ComboFormaPago(ref Combo_FormaPago, _sesion, false);
            //Métodos de Pago
            ComboBoxUI.ComboMetodoPago(ref Combo_MetodoPago, _sesion, false);
            //Artículos
            ComboBoxUI.ComboArticulos_AutoComplete_Honorarios(ref Combo_ArticulosAutoComplete, _sesion, "");
         
        }

        private void CargaDatos()
        {
            var db = new SIIE_ERP.BaseDatos.Ventas.Transacciones.Documento_VentasHonorarios(_sesion.RFC, _sesion.UserName);
            var dato = db.Get_Documento_By_Id(SIIE_ERP.BaseDatos.Documentos_Id.Doc_ReciboHonorariosVentas, Id).Rows[0];
            
            if (String.IsNullOrEmpty(dato["Id_Sucursal"].ToString()))
                Combo_Sucursal.SelectedIndex = 0;
            else
                Combo_Sucursal.SelectedValue = dato["Id_Sucursal"].ToString();

            if (String.IsNullOrEmpty(dato["Id_FormaPago"].ToString()))
                Combo_FormaPago.SelectedIndex = 0;
            else
                Combo_FormaPago.SelectedValue = dato["Id_FormaPago"].ToString();

            if (String.IsNullOrEmpty(dato["Id_MetodoPago"].ToString()))
                Combo_MetodoPago.SelectedIndex = 0;
            else
                Combo_MetodoPago.SelectedValue = dato["Id_MetodoPago"].ToString();

            Label_Estatus.Content = Get_EstatusDocs_Id.Get_Estatus_Desc((EstatusDocs_Id)Int32.Parse(dato["Estatus"].ToString()));

            if (String.IsNullOrEmpty(dato["Desc_Campana"].ToString()))
                Label_Campana.Content = "Sin Campaña";
            else
                Label_Campana.Content = dato["Desc_Campana"].ToString();

            Label_Saldo.Content = Double.Parse(dato["Saldo"].ToString()).ToString("C");
            Label_Subtotal.Content = Double.Parse(dato["Subtotal"].ToString()).ToString("C");
            Label_Total.Content = Double.Parse(dato["Total"].ToString()).ToString("C");
            Label_Descuento.Content = Double.Parse(dato["Descuento"].ToString()).ToString("C");
            Label_Impuestos.Content = Double.Parse(dato["Impuesto"].ToString()).ToString("C");

            Label_TasaImpuesto.Content = dato["Desc_TasaImpuesto"].ToString();
            Label_Partidas.Content = dato["Partidas"].ToString();
            Label_Moneda.Content = dato["Desc_Moneda"].ToString();
            Label_RFC_Cliente.Content = dato["Desc_Cliente"].ToString();
            Label_Serie.Content = dato["Desc_Serie"].ToString();
            Label_Secuencia.Content = dato["Secuencia"].ToString();

            TextBox_Descripcion.Text = dato["Descripcion"].ToString();
            TextBox_Referencia.Text = dato["Referencia"].ToString();
            TextBox_Encabezado.Text = dato["Encabezado"].ToString();
            TextBox_Pie.Text = dato["Pie"].ToString();

            Fecha_FechaCreacion.SelectedDate = DateTime.Parse(dato["Fecha_Documento"].ToString());
            Fecha_FechaEntrega.SelectedDate = DateTime.Parse(dato["Fecha_Entrega"].ToString());
            Fecha_FechaVencimiento.SelectedDate = DateTime.Parse(dato["Fecha_Vencimiento"].ToString());

            if (FuncionesClass.ConsultaFE(_sesion.RFC) != 1)
            {
                ButtonF1.Visibility = System.Windows.Visibility.Hidden;
                ButtonF2.Visibility = System.Windows.Visibility.Hidden;
            }

            if (
                (EstatusDocs_Id)Int32.Parse(dato["Estatus"].ToString()) == EstatusDocs_Id.Estatus_Doc_Cancelado ||                
                (EstatusDocs_Id)Int32.Parse(dato["Estatus"].ToString()) == EstatusDocs_Id.Estatus_Doc_Asentado
                )
            {
                if ((EstatusDocs_Id)Int32.Parse(dato["Estatus"].ToString()) == EstatusDocs_Id.Estatus_Doc_Cancelado)
                {
                    ButtonF1.IsEnabled = false;
                    ButtonF2.IsEnabled = false;
                    ButtonF3.IsEnabled = false;                    
                    ButtonF5.IsEnabled = false;
                    ButtonF8.IsEnabled = false;
                    Button_Ajuste_Saldo.IsEnabled = false;
                }
                else if ((EstatusDocs_Id)Int32.Parse(dato["Estatus"].ToString()) == EstatusDocs_Id.Estatus_Doc_Devolucion)
                {
                    ButtonF3.IsEnabled = false;                    
                    ButtonF5.IsEnabled = false;
                    ButtonF8.IsEnabled = false;
                    Button_Ajuste_Saldo.IsEnabled = false;
                }
                else if ((EstatusDocs_Id)Int32.Parse(dato["Estatus"].ToString()) == EstatusDocs_Id.Estatus_Doc_Asentado)
                {
                    ButtonF3.IsEnabled = false;
                    ButtonF5.IsEnabled = false;
                    Button_Ajuste_Saldo.IsEnabled = true;
                }

                Button_Guardar_Copy.IsEnabled = false;
                Button_Guardar.IsEnabled = false;
                DatosDataGrid.Columns[0].Visibility = System.Windows.Visibility.Hidden;

                Combo_ArticulosAutoComplete.IsEnabled = false;                
                Combo_FormaPago.IsEnabled = false;
                Combo_MetodoPago.IsEnabled = false;
                Combo_Sucursal.IsEnabled = false;

                TextBox_ArtCantidad.IsEnabled = false;                
                TextBox_ArtObservaciones.IsEnabled = false;
                TextBox_ArtTotal.IsEnabled = false;
                TextBox_Descripcion.IsEnabled = false;
                TextBox_Encabezado.IsEnabled = false;
                TextBox_Pie.IsEnabled = false;
                TextBox_Referencia.IsEnabled = false;

                Fecha_FechaCreacion.IsEnabled = false;
                Fecha_FechaEntrega.IsEnabled = false;
                Fecha_FechaVencimiento.IsEnabled = false;
            }
            else
            {
                ButtonF1.IsEnabled = false;
                ButtonF2.IsEnabled = false;                
                ButtonF8.IsEnabled = false;
            }

            if (!Boolean.Parse(dato["Is_FE"].ToString()))
            {
                ButtonF1.IsEnabled = false;
                ButtonF2.IsEnabled = false;
            }

            LlenarGrid();
        }

        public void LlenarGrid()
        {

            var dt = Documentos_Lineas.Get_Lineas(Id, Documentos_Id.Doc_ReciboHonorariosVentas).Rows;
            DatosDataGrid.Items.Clear();

            foreach (DataRow d in dt)
            {
                DatosDataGrid.Items.Add(
                    new CLinea(
                        d["Desc_Articulo"].ToString(),
                        d["Cantidad"].ToString(),
                        d["Desc_UM"].ToString(),
                        d["Precio_Unitario"].ToString(),
                        d["Precio_SubTotal"].ToString(),
                        d["IVA"].ToString(),
                        d["IVARet"].ToString(),
                        d["ISRRet"].ToString(),
                        d["Precio_Total"].ToString(),
                        d["Comentarios"].ToString(),
                        d["Id_Linea"].ToString(),
                        d["Id_Padre"].ToString()
                        ));
            }
        }

        private void Button_Guardar_Copy_Click(object sender, RoutedEventArgs e)
        {
            HonorariosClass Aux = new HonorariosClass(_sesion.UserName, _sesion.RFC);

            if (Fecha_FechaEntrega.SelectedDate == null)
            {
                MessageBox.Show("Favor de verificar la fecha de entrega.");
                return;
            }

            if (Fecha_FechaVencimiento.SelectedDate == null)
            {
                MessageBox.Show("Favor de verificar la fecha de vencimiento.");
                return;
            }

            if (Fecha_FechaCreacion.SelectedDate == null)
            {
                MessageBox.Show("Favor de verificar la fecha de creación.");
                return;
            }

            if (Aux.UpdateDocumento_Cabecera(
                    Id,
                    Documentos_Id.Doc_FacturaCliente,
                    Int32.Parse(Combo_Sucursal.SelectedValue.ToString()),
                    Int32.Parse(Combo_FormaPago.SelectedValue.ToString()),
                    Int32.Parse(Combo_MetodoPago.SelectedValue.ToString()),
                    Fecha_FechaCreacion.SelectedDate,
                    Fecha_FechaVencimiento.SelectedDate,
                    Fecha_FechaEntrega.SelectedDate,
                    TextBox_Descripcion.Text,
                    TextBox_Referencia.Text,
                    TextBox_Encabezado.Text,
                    TextBox_Pie.Text
                ).Id != 1)
            {
                MessageBox.Show("Error al modificar documento.");
            }
            else
            {
                MessageBox.Show("Cabecera del Documento modificada correctamente.");
            }
        }

        private void btnDelete_Click(object sender, RoutedEventArgs e)
        {
            CLinea obj = ((FrameworkElement)sender).DataContext as CLinea;

            Documentos_Lineas.Delete_Linea_HonorariosArrendamiento(
                Int32.Parse(obj.Id_Linea),
                Int32.Parse(obj.Id_Padre),
                Documentos_Id.Doc_ReciboHonorariosVentas
            );

            CargaDatos();
        }

        private void Combo_ArticulosAutoComplete_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (Combo_ArticulosAutoComplete.SelectedValue != null)
            {
                dbo_Cat_Articulo ArticuloAux = new dbo_Cat_Articulo(_sesion.RFC, _sesion.UserName);
                var db = new SIIE_ERP.BaseDatos.Ventas.Transacciones.Documento_VentasHonorarios(_sesion.RFC, _sesion.UserName);
                var dato = db.Get_Documento_By_Id(SIIE_ERP.BaseDatos.Documentos_Id.Doc_ReciboHonorariosVentas, Id).Rows[0];

                DataTable dt = ArticuloAux.Get_Articulo_Por_Id(Int32.Parse(Combo_ArticulosAutoComplete.SelectedValue.ToString()), Int32.Parse(dato["Id_Moneda"].ToString()));

                Label_ArtDescripcion.Content = dt.Rows[0]["Descripcion"].ToString();
                Label_ArtUnidadMedida.Content = dt.Rows[0]["Desc_UM"].ToString();               

                TextBox_ArtCantidad.Text = "0.0";                
                TextBox_ArtObservaciones.Text = "";

                var A_PrecioTotal = Double.Parse(dt.Rows[0]["Precio_Lista"].ToString());
                var A_Cantidad = TextBox_ArtCantidad.Text;
                var A_PorcIVA = Double.Parse(dato["Porc_IVA"].ToString());
                var A_PorcIVARet = Double.Parse(dato["Porc_IVARet"].ToString());
                var A_PorcISRRet = Double.Parse(dato["Porc_ISRRet"].ToString());

                Porc_IVA = A_PorcIVA;
                Porc_IVARet = A_PorcIVARet;
                Porc_ISRRet = A_PorcISRRet;

                Id_ArticuloActual = Int32.Parse(dt.Rows[0]["Id_Articulo"].ToString());
                PrecioCostoOriginal = Double.Parse(dt.Rows[0]["Precio_Lista"].ToString());
                PrecioMinimoOriginal = Double.Parse(dt.Rows[0]["Precio_Minimo"].ToString());

                Label_ArtPrecioUnitario.Content = Double.Parse(HonorariosCalculos.Get_PrecioUnitario_Final(A_PrecioTotal.ToString(),A_Cantidad.ToString(), A_PorcIVA.ToString(), A_PorcIVARet.ToString(), A_PorcISRRet.ToString())).ToString("C");

                Label_ArtSubTotal.Content = Double.Parse(HonorariosCalculos.Get_SubTotal_Final(A_PrecioTotal.ToString(), A_PorcIVA.ToString(), A_PorcIVARet.ToString(), A_PorcISRRet.ToString(), A_Cantidad.ToString())).ToString("C");

                Label_ArtIVATrans.Content = Double.Parse(HonorariosCalculos.Get_Impuestos_Final(A_PrecioTotal.ToString(), A_PorcIVA.ToString(), A_Cantidad.ToString())).ToString("C");
                Label_ArtIVARet.Content = Double.Parse(HonorariosCalculos.Get_Impuestos_Final(A_PrecioTotal.ToString(), A_PorcIVARet.ToString(), A_Cantidad.ToString())).ToString("C");
                Label_ArtISRRet.Content = Double.Parse(HonorariosCalculos.Get_Impuestos_Final(A_PrecioTotal.ToString(), A_PorcISRRet.ToString(), A_Cantidad.ToString())).ToString("C");
                TextBox_ArtTotal.Text = Double.Parse(HonorariosCalculos.Get_ArticuloTotal_Final(A_PrecioTotal.ToString(), A_Cantidad.ToString())).ToString("C");
            }
        }

        private void Articulo_TextChanged(object sender, KeyboardFocusChangedEventArgs e)
        {
            if (Combo_ArticulosAutoComplete != null && Combo_ArticulosAutoComplete.SelectedItem != null)
            {
                if (((TextBox)sender).Name.Equals("TextBox_ArtTotal"))
                {
                    try
                    {
                        try
                        {
                            Double Aux2 = Double.Parse(TextBox_ArtTotal.Text);
                        }
                        catch (Exception )
                        {
                            TextBox_ArtTotal.Text = "0.0";
                        }

                        Double Aux = Double.Parse(TextBox_ArtTotal.Text);
                                                
                        if ((Double.Parse(TextBox_ArtCantidad.Text) != 0))
                            Aux = Aux / (Double.Parse(TextBox_ArtCantidad.Text));

                        var A_PrecioTotal = Aux;
                        var A_Cantidad = TextBox_ArtCantidad.Text;
                        var A_PorcIVA = Porc_IVA;
                        var A_PorcIVARet = Porc_IVARet;
                        var A_PorcISRRet = Porc_ISRRet;

                        Label_ArtPrecioUnitario.Content = Double.Parse(HonorariosCalculos.Get_PrecioUnitario_Final(A_PrecioTotal.ToString(), A_Cantidad.ToString(), A_PorcIVA.ToString(), A_PorcIVARet.ToString(), A_PorcISRRet.ToString())).ToString("C");

                        Label_ArtSubTotal.Content = Double.Parse(HonorariosCalculos.Get_SubTotal_Final(A_PrecioTotal.ToString(), A_PorcIVA.ToString(), A_PorcIVARet.ToString(), A_PorcISRRet.ToString(), A_Cantidad.ToString())).ToString("C");

                        Label_ArtIVATrans.Content = Double.Parse(HonorariosCalculos.Get_Impuestos_Final(A_PrecioTotal.ToString(), A_PorcIVA.ToString(), A_Cantidad.ToString())).ToString("C");
                        Label_ArtIVARet.Content = Double.Parse(HonorariosCalculos.Get_Impuestos_Final(A_PrecioTotal.ToString(), A_PorcIVARet.ToString(), A_Cantidad.ToString())).ToString("C");
                        Label_ArtISRRet.Content = Double.Parse(HonorariosCalculos.Get_Impuestos_Final(A_PrecioTotal.ToString(), A_PorcISRRet.ToString(), A_Cantidad.ToString())).ToString("C");
                        TextBox_ArtTotal.Text = Double.Parse(HonorariosCalculos.Get_ArticuloTotal_Final(A_PrecioTotal.ToString(), A_Cantidad.ToString())).ToString("C");

                    }
                    catch (Exception )
                    {
                        TextBox_ArtTotal.Text = "0.0";
                    }
                }
                else
                {
                    try
                    {
                        Double Aux = Double.Parse(TextBox_ArtCantidad.Text);
                    }
                    catch (Exception)
                    {
                        TextBox_ArtCantidad.Text = "0.0";
                    }

                    var A_PrecioTotal = PrecioCostoOriginal;
                    var A_Cantidad = TextBox_ArtCantidad.Text;
                    var A_PorcIVA = Porc_IVA;
                    var A_PorcIVARet = Porc_IVARet;
                    var A_PorcISRRet = Porc_ISRRet;

                    Label_ArtPrecioUnitario.Content = Double.Parse(HonorariosCalculos.Get_PrecioUnitario_Final(A_PrecioTotal.ToString(), A_Cantidad.ToString(), A_PorcIVA.ToString(), A_PorcIVARet.ToString(), A_PorcISRRet.ToString())).ToString("C");

                    Label_ArtSubTotal.Content = Double.Parse(HonorariosCalculos.Get_SubTotal_Final(A_PrecioTotal.ToString(), A_PorcIVA.ToString(), A_PorcIVARet.ToString(), A_PorcISRRet.ToString(), A_Cantidad.ToString())).ToString("C");

                    Label_ArtIVATrans.Content = Double.Parse(HonorariosCalculos.Get_Impuestos_Final(A_PrecioTotal.ToString(), A_PorcIVA.ToString(), A_Cantidad.ToString())).ToString("C");
                    Label_ArtIVARet.Content = Double.Parse(HonorariosCalculos.Get_Impuestos_Final(A_PrecioTotal.ToString(), A_PorcIVARet.ToString(), A_Cantidad.ToString())).ToString("C");
                    Label_ArtISRRet.Content = Double.Parse(HonorariosCalculos.Get_Impuestos_Final(A_PrecioTotal.ToString(), A_PorcISRRet.ToString(), A_Cantidad.ToString())).ToString("C");
                    TextBox_ArtTotal.Text = Double.Parse(HonorariosCalculos.Get_ArticuloTotal_Final(A_PrecioTotal.ToString(), A_Cantidad.ToString())).ToString("C");
                }
            }
        }
        
        private void Button_Guardar_Click_1(object sender, RoutedEventArgs e)
        {
            if (Combo_ArticulosAutoComplete == null || Combo_ArticulosAutoComplete.SelectedItem == null)
            {
                MessageBox.Show("Favor de seleccionar un Artículo.");
                return;
            }

            try
            {
                Double Aux_Conv = Double.Parse(TextBox_ArtCantidad.Text);
            }
            catch (Exception Ex)
            {
                MessageBox.Show("Favor de ingresar una cantidad mayor a 0.");
                return;
            }

            if (Double.Parse(TextBox_ArtCantidad.Text) == 0)
            {
                MessageBox.Show("Favor de ingresar una cantidad mayor a 0.");
                return;
            }

            //if ((Double.Parse(TextBox_ArtTotal.Text) / Double.Parse(TextBox_ArtCantidad.Text)) < PrecioMinimoOriginal)
            //{
            //    MessageBox.Show("No puedes vender a un artículo con un Precio Mínimo al establecido.");
            //    return;
            //}

            if (
            Documentos_Lineas.Insert_Linea_HonorariosArrendamiento(
                _sesion.RFC,
                _sesion.UserName,
                Id,
                Documentos_Id.Doc_ReciboHonorariosVentas,
                Id_ArticuloActual,
                Double.Parse(TextBox_ArtCantidad.Text),
                Double.Parse(Label_ArtPrecioUnitario.Content.ToString(), NumberStyles.Currency),
                Double.Parse(Label_ArtSubTotal.Content.ToString(), NumberStyles.Currency),
                Porc_IVA,
                Double.Parse(Label_ArtIVATrans.Content.ToString(), NumberStyles.Currency),
                Porc_IVARet,
                Double.Parse(Label_ArtIVARet.Content.ToString(), NumberStyles.Currency),
                Porc_ISRRet,
                Double.Parse(Label_ArtISRRet.Content.ToString(), NumberStyles.Currency),
                Double.Parse(TextBox_ArtTotal.Text, NumberStyles.Currency),
                TextBox_ArtObservaciones.Text
            ).Id == 1)
            {
                CargaDatos();
                MessageBox.Show("Artículo Agregado Correctamente.");
            }
            else
            {
                MessageBox.Show("Error Agregando Artículo.");
            }

            CargaDatos();
        }

        //Descargar CFDi
        private void ButtonF1_Click_1(object sender, RoutedEventArgs e)
        {
            WindowDescarga_Ventas Cdfi = new WindowDescarga_Ventas(Id, Documentos_Id.Doc_ReciboHonorariosVentas, _sesion.RFC, _sesion.UserName);
            Cdfi.Owner = SIIE_ERP.View.NavegacionUI.GetParentWindow(this); //Cdfi.ShowDialog();            
        }

        //Agregar Addenda
        private void ButtonF1_Click_2(object sender, RoutedEventArgs e)
        {
            WindowAddenda Cdfi = new WindowAddenda(Id, Documentos_Id.Doc_ReciboHonorariosVentas);
            Cdfi.Owner = SIIE_ERP.View.NavegacionUI.GetParentWindow(this); Cdfi.ShowDialog();
        }


        //Asentar
        private void ButtonF1_Click_3(object sender, RoutedEventArgs e)
        {
            /////////////////////////////////////   Recibos de Honorarios Electrónica

            if (FuncionesClass.ConsultaFE(_sesion.RFC) == 1)
            {
                DocumentoFE FE_Doc = new DocumentoFE(_sesion.RFC, _sesion.UserName);
                string Aux = "";
                int AuxInt = 0;

                Aux = FE_Doc.HasDatosEmisor(Id, Documentos_Id.Doc_ReciboHonorariosVentas);
                if (!String.IsNullOrEmpty(Aux))
                {
                    MessageBox.Show("Para poder Crear un CDFi, debe de ingresar la siguiente información respectiva de su Empresa: " + Aux);
                    return;
                }

                Aux = FE_Doc.HasDatosCliente(Id, Documentos_Id.Doc_ReciboHonorariosVentas);
                if (!String.IsNullOrEmpty(Aux))
                {
                    MessageBox.Show("Para poder Crear un CFDi, debe de ingresar la siguiente información respectiva de su Cliente: " + Aux);
                    return;
                }

                if (!WebServicesClass.CheckConnection())
                {
                    MessageBox.Show("Para poder Crear una CFDi, debe de contar con conexión a internet.");
                    return;
                }
                int aux = WebServicesClass.NumeroTimbres(_sesion.RFC);
                String[] fechaPartida = WebServicesClass.fechaVencimiento(_sesion.RFC).ToString().Split('|');
                DateTime vencimiento = new DateTime(Convert.ToInt32(fechaPartida[0]), Convert.ToInt32(fechaPartida[1]), Convert.ToInt32(fechaPartida[2]));
                //Timbre 
                 SIIE_ERP.Codigo.Ventas.ValidacionTimbrado timbrado = new  SIIE_ERP.Codigo.Ventas.ValidacionTimbrado();
                 bool timbre = false;
                 if (!timbrado.tipoLicencia(_sesion.RFC, _sesion.IdUsuario, vencimiento))
                 {
                     //Se cambio el 10/12/14 T.
                     // AuxInt = WebServicesClass.NumeroTimbres(_sesion.RFC);

                     MessageBox.Show("No cuenta con timbres para poder crear CFDi's, favor de verificarlo con su administrador.");
                     return;

                 }

                DataTable Dt_DatosTimbrar = FE_Doc.DatosTimbrar(Id, Documentos_Id.Doc_ReciboHonorariosVentas);
                DataTable Dt_DatosTimbrarLinea = FE_Doc.DatosTimbrarLineas(Id, Documentos_Id.Doc_ReciboHonorariosVentas);

                if (Dt_DatosTimbrarLinea.Rows.Count == 0)
                {
                    MessageBox.Show("No se puede crear un CFDi sin partidas.");
                    return;
                }

                CFDx.VersionCFD Version = CFDx.VersionCFD.CFDv3_2;


                CFDx CFDs = new CFDx();

                CFDs.Comprobante(
                    Version,
                    Dt_DatosTimbrar.Rows[0]["Folio"].ToString().Trim(),
                    DateTime.Now,
                    Dt_DatosTimbrar.Rows[0]["FormaDePago"].ToString().Trim(),
                    Math.Round(Double.Parse(Dt_DatosTimbrar.Rows[0]["Subtotal"].ToString().Trim()), 2),
                    Math.Round(Double.Parse(Dt_DatosTimbrar.Rows[0]["Total"].ToString().Trim()), 2),
                    SIIE_FE_Class.ComprobanteTipoDeComprobante.ingreso,
                    Dt_DatosTimbrar.Rows[0]["MetodoDePago"].ToString().Trim(),
                    Dt_DatosTimbrar.Rows[0]["LugarExpedicion"].ToString().Trim(),
                    serie: Dt_DatosTimbrar.Rows[0]["Serie"].ToString().Trim(),
                    TipoDeCambio: Dt_DatosTimbrar.Rows[0]["TipoDeCambio"].ToString().Trim(),
                    Moneda: Dt_DatosTimbrar.Rows[0]["Moneda"].ToString().Trim()
                );

                CFDs.AgregaEmisor(
                    Dt_DatosTimbrar.Rows[0]["RFC"].ToString().Trim(),
                    Dt_DatosTimbrar.Rows[0]["Calle"].ToString().Trim(),
                    Dt_DatosTimbrar.Rows[0]["Municipio"].ToString().Trim(),
                    Dt_DatosTimbrar.Rows[0]["Estado"].ToString().Trim(),
                    Dt_DatosTimbrar.Rows[0]["Pais"].ToString().Trim(),
                    Dt_DatosTimbrar.Rows[0]["CodigoPostal"].ToString().Trim(),
                    Nombre: Dt_DatosTimbrar.Rows[0]["Nombre"].ToString().Trim(),
                    NoExterior: Dt_DatosTimbrar.Rows[0]["NoExterior"].ToString().Trim(),
                    Colonia: Dt_DatosTimbrar.Rows[0]["Colonia"].ToString().Trim()
                );

                CFDs.AgregaReceptor(
                    Dt_DatosTimbrar.Rows[0]["RFC_Cliente"].ToString().Trim(),
                    Nombre: Dt_DatosTimbrar.Rows[0]["Nombre_Cliente"].ToString().Trim(),
                    Calle: Dt_DatosTimbrar.Rows[0]["Calle_Cliente"].ToString().Trim(),
                    Municipio: Dt_DatosTimbrar.Rows[0]["Municipio_Cliente"].ToString().Trim(),
                    Estado: Dt_DatosTimbrar.Rows[0]["Estado_Cliente"].ToString().Trim(),
                    Pais: Dt_DatosTimbrar.Rows[0]["Pais_Cliente"].ToString().Trim(),
                    CodigoPostal: Dt_DatosTimbrar.Rows[0]["CodigoPostal_Cliente"].ToString().Trim(),
                    NoExterior: Dt_DatosTimbrar.Rows[0]["NoExterior_Cliente"].ToString().Trim(),
                    Colonia: Dt_DatosTimbrar.Rows[0]["Colonia_Cliente"].ToString().Trim()
                );

                CFDs.AgregaRegimenFiscal(Dt_DatosTimbrar.Rows[0]["RegimenFiscal"].ToString().Trim());

                for (int i = 0; i < Dt_DatosTimbrarLinea.Rows.Count; i++)
                {
                    CFDs.AgregaConcepto(
                        Math.Round(Double.Parse(Dt_DatosTimbrarLinea.Rows[i]["Cantidad"].ToString().Trim()), 2),
                        Dt_DatosTimbrarLinea.Rows[i]["UnidadMedida"].ToString().Trim(),
                        Dt_DatosTimbrarLinea.Rows[i]["ArticuloNombre"].ToString().Trim(),
                        Math.Round(Double.Parse(Dt_DatosTimbrarLinea.Rows[i]["Precio_Unitario"].ToString().Trim()), 2));

                    CFDs.AgregaImpuesto(
                        SIIE_FE_Class.ComprobanteImpuestosTrasladoImpuesto.IVA,
                        Math.Round(Double.Parse(Dt_DatosTimbrarLinea.Rows[i]["IVA"].ToString().Trim()), 2),
                        Math.Round(Double.Parse(Dt_DatosTimbrarLinea.Rows[i]["Porc_IVA"].ToString().Trim()), 2),
                        SIIE_FE_Class.ComprobanteImpuestosRetencionImpuesto.IVA,
                        Math.Round(Double.Parse(Dt_DatosTimbrarLinea.Rows[i]["IVARet"].ToString().Trim()), 2)
                        );

                    CFDs.AgregaImpuesto(
                        SIIE_FE_Class.ComprobanteImpuestosTrasladoImpuesto.IVA,
                        0,
                        0,
                        SIIE_FE_Class.ComprobanteImpuestosRetencionImpuesto.ISR,
                        Math.Round(Double.Parse(Dt_DatosTimbrarLinea.Rows[i]["ISRRet"].ToString().Trim()), 2)
                        );                     

                }
                string Errores = "";

                if (!CFDs.CreaFacturaXML((byte[])Dt_DatosTimbrar.Rows[0]["KEY_F"], Dt_DatosTimbrar.Rows[0]["PassW"].ToString().Trim(), (byte[])Dt_DatosTimbrar.Rows[0]["CER_F"], ref Errores))
                {
                    if (Errores.Contains("El atributo 'rfc' no es válido. El valor"))
                    {
                        MessageBox.Show("El RFC o la información de su cliente no es válida. Favor de Verificar");
                        return;
                    }
                    else
                    {
                        MessageBox.Show("No se ha podido crear el RFC de su cliente de forma correcto, favor de verificar la dirección de su cliente, su dirección fiscal, su régimen fiscal y sus archivos .CER y .KEY que subió al sistema.");
                    }
                }
                else
                {
                    string XML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "\n";
                    XML += CFDs.MyXML.Replace("&#xD;&#xA;", "");

                    string XML_Timbrado = WebServicesClass.TimbrarXML(Documentos_Id.Doc_ReciboHonorariosVentas, Id, XML, _sesion.RFC,timbre);

                    try
                    {
                        int AuxCheck = Int32.Parse(XML_Timbrado[0].ToString());

                        if (AuxCheck == 1)
                        {
                            MessageBox.Show("Los archivos .CER y .KEY que proporcionó corresponden a los de la FIEL, no a los del Certificado de Sello Digital. Favor de verificar.");
                            return;
                        }
                        else if (AuxCheck == 2)
                        {
                            MessageBox.Show("Ha ocurrido un error, el equipo de SIE PyMEs recibirá el mensaje para trabajar en ello. Saludos.");

                            //ENVIA EL CORREO DE ERROR
                            SmtpClient mySmtpClient = new SmtpClient("smtp.uservers.net");
                            MailMessage myMessage = new MailMessage();
                            MailAddress fromAdd = new MailAddress("soporte@siie.com.mx");

                            myMessage.Subject = "[SIE PyMES Desktop] ERROR CFDi [Recibo Arrendamiento Cliente]";
                            myMessage.IsBodyHtml = true;

                            myMessage.Body = XML_Timbrado + "<br /><br />" + "Tipo Error: Web Service FEL" + "<br />" + "RFC: " + _sesion.RFC + "<br />";

                            myMessage.From = fromAdd;
                            myMessage.To.Add("soporte@siie.com.mx");
                            myMessage.To.Add("adolfol@siie.com.mx");

                            mySmtpClient.Port = 587;
                            mySmtpClient.Credentials = new NetworkCredential("soporte@siie.com.mx", "Siie0214");
                            mySmtpClient.Send(myMessage);
                            return;
                        }
                    }
                    catch (Exception)
                    {

                        //Metodo Para restar Timbre
                       // WebServicesClass.RestarTimbre(_sesion.RFC);

                        Respuesta ds_XML = DocumentoFE.Insert_XML(Documentos_Id.Doc_ReciboHonorariosVentas, Id, XML_Timbrado);

                        XmlDocument Doc = new XmlDocument();
                        XmlElement Doc2 = default(XmlElement);

                        Doc.LoadXml(XML_Timbrado);
                        Doc2 = (XmlElement)Doc.ChildNodes[1];

                        string QR_Code = null;
                        string QR_total = null;

                        //COMPROBANTE
                        OleDbCommand cmd_FE1 = new OleDbCommand();

                        int Id_CFDI_Comprobante = DocumentoFE.Next_CFDI_Comprobante();

                        cmd_FE1.Parameters.AddWithValue("@Id_CFDI_Comprobante", Id_CFDI_Comprobante.ToString());
                        cmd_FE1.Parameters.AddWithValue("@Id_Documento", Id.ToString());
                        cmd_FE1.Parameters.AddWithValue("@Id_TipoDocumento", Documentos_Id.Doc_ReciboHonorariosVentas.GetHashCode().ToString());

                        for (int i = 0; i <= Doc2.Attributes.Count - 1; i += 1)
                        {
                            if ((Doc2.Attributes[i].Name.Equals("xmlns:xsi")))
                            {
                                cmd_FE1.Parameters.AddWithValue("@xmlns_xsi", Doc2.Attributes[i].Value.ToString().Trim());
                            }
                            else if ((Doc2.Attributes[i].Name.Equals("xsi:schemaLocation")))
                            {
                                cmd_FE1.Parameters.AddWithValue("@xsi_schemaLocation", Doc2.Attributes[i].Value.ToString().Trim());
                            }
                            else if ((Doc2.Attributes[i].Name.Equals("version")))
                            {
                                cmd_FE1.Parameters.AddWithValue("@Version", Doc2.Attributes[i].Value.ToString().Trim());
                            }
                            else if ((Doc2.Attributes[i].Name.Equals("serie")))
                            {
                                cmd_FE1.Parameters.AddWithValue("@Serie", Doc2.Attributes[i].Value.ToString().Trim());
                            }
                            else if ((Doc2.Attributes[i].Name.Equals("folio")))
                            {
                                cmd_FE1.Parameters.AddWithValue("@Folio", Doc2.Attributes[i].Value.ToString().Trim());
                            }
                            else if ((Doc2.Attributes[i].Name.Equals("fecha")))
                            {
                                cmd_FE1.Parameters.AddWithValue("@Fecha", Doc2.Attributes[i].Value.ToString().Trim());
                            }
                            else if ((Doc2.Attributes[i].Name.Equals("sello")))
                            {
                                cmd_FE1.Parameters.AddWithValue("@Sello", Doc2.Attributes[i].Value.ToString().Trim());
                            }
                            else if ((Doc2.Attributes[i].Name.Equals("formaDePago")))
                            {
                                cmd_FE1.Parameters.AddWithValue("@FormaDePago", Doc2.Attributes[i].Value.ToString().Trim());
                            }
                            else if ((Doc2.Attributes[i].Name.Equals("noCertificado")))
                            {
                                cmd_FE1.Parameters.AddWithValue("@NoCertificado", Doc2.Attributes[i].Value.ToString().Trim());
                            }
                            else if ((Doc2.Attributes[i].Name.Equals("certificado")))
                            {
                                cmd_FE1.Parameters.AddWithValue("@Certificado", Doc2.Attributes[i].Value.ToString().Trim());
                            }
                            else if ((Doc2.Attributes[i].Name.Equals("condicionesDePago")))
                            {
                                cmd_FE1.Parameters.AddWithValue("@CondicionesDePago", Doc2.Attributes[i].Value.ToString().Trim());
                            }
                            else if ((Doc2.Attributes[i].Name.Equals("subTotal")))
                            {
                                cmd_FE1.Parameters.AddWithValue("@SubTotal", Doc2.Attributes[i].Value.ToString().Trim());
                            }
                            else if ((Doc2.Attributes[i].Name.Equals("descuento")))
                            {
                                cmd_FE1.Parameters.AddWithValue("@Descuento", Doc2.Attributes[i].Value.ToString().Trim());
                            }
                            else if ((Doc2.Attributes[i].Name.Equals("motivoDescuento")))
                            {
                                cmd_FE1.Parameters.AddWithValue("@MotivoDescuento", Doc2.Attributes[i].Value.ToString().Trim());
                            }
                            else if ((Doc2.Attributes[i].Name.Equals("TipoCambio")))
                            {
                                cmd_FE1.Parameters.AddWithValue("@TipoCambio", Doc2.Attributes[i].Value.ToString().Trim());
                            }
                            else if ((Doc2.Attributes[i].Name.Equals("Moneda")))
                            {
                                cmd_FE1.Parameters.AddWithValue("@Moneda", Doc2.Attributes[i].Value.ToString().Trim());
                            }
                            else if ((Doc2.Attributes[i].Name.Equals("total")))
                            {
                                cmd_FE1.Parameters.AddWithValue("@Total", Doc2.Attributes[i].Value.ToString().Trim());
                                QR_total = string.Format("{0:0000000000.000000}", Convert.ToDouble(Doc2.Attributes[i].Value.ToString().Trim()));
                            }
                            else if ((Doc2.Attributes[i].Name.Equals("tipoDeComprobante")))
                            {
                                cmd_FE1.Parameters.AddWithValue("@TipoDeComprobante", Doc2.Attributes[i].Value.ToString().Trim());
                            }
                            else if ((Doc2.Attributes[i].Name.Equals("metodoDePago")))
                            {
                                cmd_FE1.Parameters.AddWithValue("@MetodoDePago", Doc2.Attributes[i].Value.ToString().Trim());
                            }
                            else if ((Doc2.Attributes[i].Name.Equals("LugarExpedicion")))
                            {
                                cmd_FE1.Parameters.AddWithValue("@LugarExpedicion", Doc2.Attributes[i].Value.ToString().Trim());
                            }
                            else if ((Doc2.Attributes[i].Name.Equals("NumCtaPago")))
                            {
                                cmd_FE1.Parameters.AddWithValue("@NumCtaPago", Doc2.Attributes[i].Value.ToString().Trim());
                            }
                            else if ((Doc2.Attributes[i].Name.Equals("FolioFiscalOrig")))
                            {
                                cmd_FE1.Parameters.AddWithValue("@FolioFiscalOrig", Doc2.Attributes[i].Value.ToString().Trim());
                            }
                            else if ((Doc2.Attributes[i].Name.Equals("SerieFolioFiscalOrig")))
                            {
                                cmd_FE1.Parameters.AddWithValue("@SerieFolioFiscalOrig", Doc2.Attributes[i].Value.ToString().Trim());
                            }
                            else if ((Doc2.Attributes[i].Name.Equals("FechaFolioFiscalOrig")))
                            {
                                cmd_FE1.Parameters.AddWithValue("@FechaFolioFiscalOrig", Doc2.Attributes[i].Value.ToString().Trim());
                            }
                            else if ((Doc2.Attributes[i].Name.Equals("MontoFolioFiscalOrig")))
                            {
                                cmd_FE1.Parameters.AddWithValue("@MontoFolioFiscalOrig", Doc2.Attributes[i].Value.ToString().Trim());
                            }
                            else if ((Doc2.Attributes[i].Name.Equals("xmlns:cfdi")))
                            {
                                cmd_FE1.Parameters.AddWithValue("@xmlns_cfdi", Doc2.Attributes[i].Value.ToString().Trim());
                            }
                        }

                        //NODOS DEL COMPROBANTE
                        for (int i = 0; i <= Doc2.ChildNodes.Count - 1; i += 1)
                        {

                            if ((Doc2.ChildNodes[i].Name.Equals("cfdi:Emisor")))
                            {
                                int Id_CFDI_Emisor = DocumentoFE.Next_CFDI_Emisor();

                                OleDbCommand cmd_FE2 = new OleDbCommand();

                                cmd_FE2.Parameters.AddWithValue("@Id_CFDI_Emisor", Id_CFDI_Emisor.ToString());
                                cmd_FE2.Parameters.AddWithValue("@Id_CFDI_Comprobante", Id_CFDI_Comprobante.ToString());

                                for (int j = 0; j <= Doc2.ChildNodes[i].Attributes.Count - 1; j += 1)
                                {
                                    if ((Doc2.ChildNodes[i].Attributes[j].Name.Equals("rfc")))
                                    {
                                        cmd_FE2.Parameters.AddWithValue("@RFC", Doc2.ChildNodes[i].Attributes[j].Value.ToString().Trim());
                                        QR_Code = "?re=" + Doc2.ChildNodes[i].Attributes[j].Value.ToString().Trim();
                                    }
                                    else if ((Doc2.ChildNodes[i].Attributes[j].Name.Equals("nombre")))
                                    {
                                        cmd_FE2.Parameters.AddWithValue("@Nombre", Doc2.ChildNodes[i].Attributes[j].Value.ToString().Trim());
                                    }
                                }

                                for (int j = 0; j <= Doc2.ChildNodes[i].ChildNodes.Count - 1; j += 1)
                                {

                                    if ((Doc2.ChildNodes[i].ChildNodes[j].Name.Equals("cfdi:DomicilioFiscal")))
                                    {
                                        OleDbCommand cmd_FE3 = new OleDbCommand();

                                        cmd_FE3.Parameters.AddWithValue("@Id_CFDI_DomicilioFiscal", DocumentoFE.Next_CFDI_DomicilioFiscal());
                                        cmd_FE3.Parameters.AddWithValue("@Id_CFDI_Emisor", Id_CFDI_Emisor.ToString());

                                        for (int k = 0; k <= Doc2.ChildNodes[i].ChildNodes[j].Attributes.Count - 1; k += 1)
                                        {

                                            if ((Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Name.Equals("calle")))
                                            {
                                                cmd_FE3.Parameters.AddWithValue("@Calle", Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Value.ToString().Trim());
                                            }
                                            else if ((Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Name.Equals("noExterior")))
                                            {
                                                cmd_FE3.Parameters.AddWithValue("@NoExterior", Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Value.ToString().Trim());
                                            }
                                            else if ((Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Name.Equals("noInterior")))
                                            {
                                                cmd_FE3.Parameters.AddWithValue("@NoInterior", Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Value.ToString().Trim());
                                            }
                                            else if ((Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Name.Equals("colonia")))
                                            {
                                                cmd_FE3.Parameters.AddWithValue("@Colonia", Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Value.ToString().Trim());
                                            }
                                            else if ((Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Name.Equals("localidad")))
                                            {
                                                cmd_FE3.Parameters.AddWithValue("@Localidad", Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Value.ToString().Trim());
                                            }
                                            else if ((Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Name.Equals("referencia")))
                                            {
                                                cmd_FE3.Parameters.AddWithValue("@Referencia", Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Value.ToString().Trim());
                                            }
                                            else if ((Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Name.Equals("municipio")))
                                            {
                                                cmd_FE3.Parameters.AddWithValue("@Municipio", Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Value.ToString().Trim());
                                            }
                                            else if ((Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Name.Equals("estado")))
                                            {
                                                cmd_FE3.Parameters.AddWithValue("@Estado", Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Value.ToString().Trim());
                                            }
                                            else if ((Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Name.Equals("pais")))
                                            {
                                                cmd_FE3.Parameters.AddWithValue("@País", Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Value.ToString().Trim());
                                            }
                                            else if ((Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Name.Equals("codigoPostal")))
                                            {
                                                cmd_FE3.Parameters.AddWithValue("@CodigoPostal", Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Value.ToString().Trim());
                                            }
                                        }

                                        Respuesta ds_FE3 = DocumentoFE.Insert_CFDI_DomicilioFiscal(cmd_FE3);
                                    }
                                    else if ((Doc2.ChildNodes[i].ChildNodes[j].Name.Equals("cfdi:RegimenFiscal")))
                                    {
                                        OleDbCommand cmd_FE3 = new OleDbCommand();

                                        cmd_FE3.Parameters.AddWithValue("@Id_CFDI_RegimenFiscal", DocumentoFE.Next_CFDI_RegimenFiscal());
                                        cmd_FE3.Parameters.AddWithValue("@Id_CFDI_Emisor", Id_CFDI_Emisor.ToString());


                                        for (int k = 0; k <= Doc2.ChildNodes[i].ChildNodes[j].Attributes.Count - 1; k += 1)
                                        {
                                            if ((Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Name.Equals("Regimen")))
                                            {
                                                cmd_FE3.Parameters.AddWithValue("@Regimen", Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Value.ToString().Trim());
                                            }
                                        }
                                        Respuesta ds_FE3 = DocumentoFE.Insert_CFDI_RegimenFiscal(cmd_FE3);
                                    }
                                }

                                Respuesta ds_FE2 = DocumentoFE.Insert_CFDI_Emisor(cmd_FE2);
                            }
                            else if ((Doc2.ChildNodes[i].Name.Equals("cfdi:Receptor")))
                            {
                                OleDbCommand cmd_FE2 = new OleDbCommand();

                                int Id_CFDI_Receptor = DocumentoFE.Next_CFDI_Receptor();

                                cmd_FE2.Parameters.AddWithValue("@Id_CFDI_Receptor", Id_CFDI_Receptor.ToString());
                                cmd_FE2.Parameters.AddWithValue("@Id_CFDI_Comprobante", Id_CFDI_Comprobante.ToString());

                                for (int j = 0; j <= Doc2.ChildNodes[i].Attributes.Count - 1; j += 1)
                                {
                                    if ((Doc2.ChildNodes[i].Attributes[j].Name.Equals("rfc")))
                                    {
                                        cmd_FE2.Parameters.AddWithValue("@RFC", Doc2.ChildNodes[i].Attributes[j].Value.ToString().Trim());
                                        QR_Code += "&rr=" + Doc2.ChildNodes[i].Attributes[j].Value.ToString().Trim();
                                        QR_Code += "&tt=" + QR_total;
                                    }
                                    else if ((Doc2.ChildNodes[i].Attributes[j].Name.Equals("nombre")))
                                    {
                                        cmd_FE2.Parameters.AddWithValue("@Nombre", Doc2.ChildNodes[i].Attributes[j].Value.ToString().Trim());
                                    }
                                }

                                for (int j = 0; j <= Doc2.ChildNodes[i].ChildNodes.Count - 1; j += 1)
                                {

                                    if ((Doc2.ChildNodes[i].ChildNodes[j].Name.Equals("cfdi:Domicilio")))
                                    {
                                        OleDbCommand cmd_FE3 = new OleDbCommand();

                                        cmd_FE3.Parameters.AddWithValue("@Id_CFDI_Domicilio", DocumentoFE.Next_CFDI_Domicilio());
                                        cmd_FE3.Parameters.AddWithValue("@Id_CFDI_Receptor", Id_CFDI_Receptor.ToString());


                                        for (int k = 0; k <= Doc2.ChildNodes[i].ChildNodes[j].Attributes.Count - 1; k += 1)
                                        {
                                            if ((Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Name.Equals("calle")))
                                            {
                                                cmd_FE3.Parameters.AddWithValue("@Calle", Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Value.ToString().Trim());
                                            }
                                            else if ((Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Name.Equals("noExterior")))
                                            {
                                                cmd_FE3.Parameters.AddWithValue("@NoExterior", Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Value.ToString().Trim());
                                            }
                                            else if ((Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Name.Equals("noInterior")))
                                            {
                                                cmd_FE3.Parameters.AddWithValue("@NoInterior", Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Value.ToString().Trim());
                                            }
                                            else if ((Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Name.Equals("colonia")))
                                            {
                                                cmd_FE3.Parameters.AddWithValue("@Colonia", Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Value.ToString().Trim());
                                            }
                                            else if ((Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Name.Equals("localidad")))
                                            {
                                                cmd_FE3.Parameters.AddWithValue("@Localidad", Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Value.ToString().Trim());
                                            }
                                            else if ((Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Name.Equals("referencia")))
                                            {
                                                cmd_FE3.Parameters.AddWithValue("@Referencia", Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Value.ToString().Trim());
                                            }
                                            else if ((Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Name.Equals("municipio")))
                                            {
                                                cmd_FE3.Parameters.AddWithValue("@Municipio", Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Value.ToString().Trim());
                                            }
                                            else if ((Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Name.Equals("estado")))
                                            {
                                                cmd_FE3.Parameters.AddWithValue("@Estado", Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Value.ToString().Trim());
                                            }
                                            else if ((Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Name.Equals("pais")))
                                            {
                                                cmd_FE3.Parameters.AddWithValue("@País", Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Value.ToString().Trim());
                                            }
                                            else if ((Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Name.Equals("codigoPostal")))
                                            {
                                                cmd_FE3.Parameters.AddWithValue("@CodigoPostal", Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Value.ToString().Trim());
                                            }
                                        }

                                        Respuesta ds_FE3 = DocumentoFE.Insert_CFDI_Domicilio(cmd_FE3);
                                    }
                                }

                                Respuesta ds_FE2 = DocumentoFE.Insert_CFDI_Receptor(cmd_FE2);
                            }
                            else if ((Doc2.ChildNodes[i].Name.Equals("cfdi:Conceptos")))
                            {
                                for (int j = 0; j <= Doc2.ChildNodes[i].ChildNodes.Count - 1; j += 1)
                                {

                                    if ((Doc2.ChildNodes[i].ChildNodes[j].Name.Equals("cfdi:Concepto")))
                                    {
                                        OleDbCommand cmd_FE3 = new OleDbCommand();

                                        cmd_FE3.Parameters.AddWithValue("@Id_CFDI_Concepto", DocumentoFE.Next_CFDI_Concepto());
                                        cmd_FE3.Parameters.AddWithValue("@Id_CFDI_Comprobante", Id_CFDI_Comprobante.ToString());

                                        for (int k = 0; k <= Doc2.ChildNodes[i].ChildNodes[j].Attributes.Count - 1; k += 1)
                                        {
                                            if ((Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Name.Equals("cantidad")))
                                            {
                                                cmd_FE3.Parameters.AddWithValue("@Cantidad", Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Value.ToString().Trim());
                                            }
                                            else if ((Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Name.Equals("unidad")))
                                            {
                                                cmd_FE3.Parameters.AddWithValue("@Unidad", Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Value.ToString().Trim());
                                            }
                                            else if ((Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Name.Equals("noIdentificacion")))
                                            {
                                                cmd_FE3.Parameters.AddWithValue("@NoIdentificacion", Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Value.ToString().Trim());
                                            }
                                            else if ((Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Name.Equals("descripcion")))
                                            {
                                                cmd_FE3.Parameters.AddWithValue("@Descripcion", Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Value.ToString().Trim());
                                            }
                                            else if ((Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Name.Equals("valorUnitario")))
                                            {
                                                cmd_FE3.Parameters.AddWithValue("@ValorUnitario", Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Value.ToString().Trim());
                                            }
                                            else if ((Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Name.Equals("importe")))
                                            {
                                                cmd_FE3.Parameters.AddWithValue("@Importe", Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Value.ToString().Trim());
                                            }
                                        }

                                        Respuesta ds_FE3 = DocumentoFE.Insert_CFDI_Concepto(cmd_FE3);
                                    }
                                }
                            }
                            else if ((Doc2.ChildNodes[i].Name.Equals("cfdi:Impuestos")))
                            {
                                for (int j = 0; j <= Doc2.ChildNodes[i].ChildNodes.Count - 1; j += 1)
                                {
                                    if ((Doc2.ChildNodes[i].ChildNodes[j].Name.Equals("cfdi:Retenciones")))
                                    {

                                        for (int k = 0; k <= Doc2.ChildNodes[i].ChildNodes[j].ChildNodes.Count - 1; k += 1)
                                        {
                                            OleDbCommand cmd_FE3 = new OleDbCommand();

                                            cmd_FE3.Parameters.AddWithValue("@Id_CFDI_Retencion", DocumentoFE.Next_CFDI_Retencion());
                                            cmd_FE3.Parameters.AddWithValue("@Id_CFDI_Comprobante", Id_CFDI_Comprobante.ToString());

                                            for (int l = 0; l <= Doc2.ChildNodes[i].ChildNodes[j].ChildNodes[k].Attributes.Count - 1; l += 1)
                                            {
                                                if ((Doc2.ChildNodes[i].ChildNodes[j].ChildNodes[k].Attributes[l].Name.Equals("impuesto")))
                                                {
                                                    cmd_FE3.Parameters.AddWithValue("@Impuesto", Doc2.ChildNodes[i].ChildNodes[j].ChildNodes[k].Attributes[l].Value.ToString().Trim());
                                                }
                                                else if ((Doc2.ChildNodes[i].ChildNodes[j].ChildNodes[k].Attributes[l].Name.Equals("importe")))
                                                {
                                                    cmd_FE3.Parameters.AddWithValue("@Importe", Doc2.ChildNodes[i].ChildNodes[j].ChildNodes[k].Attributes[l].Value.ToString().Trim());
                                                }
                                            }

                                            Respuesta ds_FE3 = DocumentoFE.Insert_CFDI_Retencion(cmd_FE3);

                                        }
                                    }
                                    else if ((Doc2.ChildNodes[i].ChildNodes[j].Name.Equals("cfdi:Traslados")))
                                    {

                                        for (int k = 0; k <= Doc2.ChildNodes[i].ChildNodes[j].ChildNodes.Count - 1; k += 1)
                                        {
                                            OleDbCommand cmd_FE3 = new OleDbCommand();

                                            cmd_FE3.Parameters.AddWithValue("@Id_CFDI_Traslado", DocumentoFE.Next_CFDI_Traslado());
                                            cmd_FE3.Parameters.AddWithValue("@Id_CFDI_Comprobante", Id_CFDI_Comprobante.ToString());

                                            for (int l = 0; l <= Doc2.ChildNodes[i].ChildNodes[j].ChildNodes[k].Attributes.Count - 1; l += 1)
                                            {
                                                if ((Doc2.ChildNodes[i].ChildNodes[j].ChildNodes[k].Attributes[l].Name.Equals("impuesto")))
                                                {
                                                    cmd_FE3.Parameters.AddWithValue("@Impuesto", Doc2.ChildNodes[i].ChildNodes[j].ChildNodes[k].Attributes[l].Value.ToString().Trim());
                                                }
                                                else if ((Doc2.ChildNodes[i].ChildNodes[j].ChildNodes[k].Attributes[l].Name.Equals("importe")))
                                                {
                                                    cmd_FE3.Parameters.AddWithValue("@Importe", Doc2.ChildNodes[i].ChildNodes[j].ChildNodes[k].Attributes[l].Value.ToString().Trim());
                                                }
                                                else if ((Doc2.ChildNodes[i].ChildNodes[j].ChildNodes[k].Attributes[l].Name.Equals("tasa")))
                                                {
                                                    cmd_FE3.Parameters.AddWithValue("@Tasa", Doc2.ChildNodes[i].ChildNodes[j].ChildNodes[k].Attributes[l].Value.ToString().Trim());
                                                }
                                            }

                                            Respuesta ds_FE3 = DocumentoFE.Insert_CFDI_Traslado(cmd_FE3);
                                        }
                                    }
                                }
                            }
                            else if ((Doc2.ChildNodes[i].Name.Equals("cfdi:Complemento")))
                            {
                                for (int j = 0; j <= Doc2.ChildNodes[i].ChildNodes.Count - 1; j += 1)
                                {

                                    if ((Doc2.ChildNodes[i].ChildNodes[j].Name.Equals("tfd:TimbreFiscalDigital")))
                                    {
                                        OleDbCommand cmd_FE3 = new OleDbCommand();

                                        cmd_FE3.Parameters.AddWithValue("@Id_CFDI_TimbreFiscalDigital", DocumentoFE.Next_CFDI_TimbreFiscalDigital());
                                        cmd_FE3.Parameters.AddWithValue("@Id_CFDI_Comprobante", Id_CFDI_Comprobante.ToString());

                                        for (int k = 0; k <= Doc2.ChildNodes[i].ChildNodes[j].Attributes.Count - 1; k += 1)
                                        {
                                            if ((Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Name.Equals("xmlns:tfd")))
                                            {
                                                cmd_FE3.Parameters.AddWithValue("@xmlns_tfd", Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Value.ToString().Trim());
                                            }
                                            else if ((Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Name.Equals("xsi:schemaLocation")))
                                            {
                                                cmd_FE3.Parameters.AddWithValue("@xsi_schemaLocation", Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Value.ToString().Trim());
                                            }
                                            else if ((Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Name.Equals("version")))
                                            {
                                                cmd_FE3.Parameters.AddWithValue("@Version", Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Value.ToString().Trim());
                                            }
                                            else if ((Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Name.Equals("UUID")))
                                            {
                                                cmd_FE3.Parameters.AddWithValue("@UUID", Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Value.ToString().Trim());
                                                QR_Code += "&id=" + Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Value.ToString().Trim();
                                            }
                                            else if ((Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Name.Equals("FechaTimbrado")))
                                            {
                                                cmd_FE3.Parameters.AddWithValue("@FechaTimbrado", Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Value.ToString().Trim());
                                            }
                                            else if ((Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Name.Equals("selloCFD")))
                                            {
                                                cmd_FE3.Parameters.AddWithValue("@selloCFD", Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Value.ToString().Trim());
                                            }
                                            else if ((Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Name.Equals("noCertificadoSAT")))
                                            {
                                                cmd_FE3.Parameters.AddWithValue("@NoCertificadoSAT", Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Value.ToString().Trim());
                                            }
                                            else if ((Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Name.Equals("selloSAT")))
                                            {
                                                cmd_FE3.Parameters.AddWithValue("@SelloSAT", Doc2.ChildNodes[i].ChildNodes[j].Attributes[k].Value.ToString().Trim());
                                            }
                                        }

                                        Respuesta ds_FE3 = DocumentoFE.Insert_CFDI_TimbreFiscalDigital(cmd_FE3);
                                    }
                                }
                            }
                        }

                        Respuesta ds_FE1 = DocumentoFE.Insert_CFDI_Comprobante(cmd_FE1);

                        //QR
                        System.Drawing.Bitmap B = null;
                        B = QRGen(QR_Code, 0);
                        MemoryStream S = new MemoryStream();
                        B.Save(S, System.Drawing.Imaging.ImageFormat.Bmp);
                        byte[] Arreglito = S.ToArray();

                        OleDbCommand cmd_QR = new OleDbCommand();

                        cmd_QR.Parameters.AddWithValue("@Id_Documento", Id);
                        cmd_QR.Parameters.AddWithValue("@QR", Arreglito);
                        Respuesta ds_QR = DocumentoFE.Insert_QR(Documentos_Id.Doc_ReciboHonorariosVentas, cmd_QR);
                    }
                }
            }

            /////////////////////////////////////   Recibos Honorarios Convencional


            var db = new SIIE_ERP.BaseDatos.Ventas.Transacciones.Documento_VentasHonorarios(_sesion.RFC, _sesion.UserName);
            var dato = db.Get_Documento_By_Id(SIIE_ERP.BaseDatos.Documentos_Id.Doc_ReciboHonorariosVentas, Id).Rows[0];

            Documento_VentasHonorarios Doc_C = new Documento_VentasHonorarios(_sesion.RFC, _sesion.UserName);
            Respuesta R = Doc_C.Updata_Documento_Estatus(Id, Documentos_Id.Doc_ReciboHonorariosVentas, EstatusDocs_Id.Estatus_Doc_Asentado);

            if (R.Id != 1)
            {
                MessageBox.Show("Error");
            }
            else
            {
                _tabControlPadre.Items.Remove(_tabItemPadre);
                SIIE_ERP.View.NavegacionUI.AbrirPestanaEditar(Id.ToString(),
                                                         typeof(ReciboHonorarios_Edita),
                                                         ref _tabControlPadre, _sesion);
            }
        }

        private System.Drawing.Bitmap QRGen(string input, int qrlevel)
        {

            string toenc = input;
            ThoughtWorks.QRCode.Codec.QRCodeEncoder qe = new ThoughtWorks.QRCode.Codec.QRCodeEncoder();
            qe.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
            qe.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.L;
            qe.QRCodeVersion = qrlevel;
            System.Drawing.Bitmap bm;
            bm = qe.Encode(toenc);

            return bm;
        }

        //Cancelar
        private void ButtonF1_Click_5(object sender, RoutedEventArgs e)
        {
            Documento_VentasHonorarios Doc_C = new Documento_VentasHonorarios(_sesion.RFC, _sesion.UserName);
            Respuesta R = Doc_C.Updata_Documento_Estatus(Id, Documentos_Id.Doc_ReciboHonorariosVentas, EstatusDocs_Id.Estatus_Doc_Cancelado);

            if (R.Id != 1)
            {
                MessageBox.Show("Error");
            }
            else
            {
                _tabControlPadre.Items.Remove(_tabItemPadre);
                SIIE_ERP.View.NavegacionUI.AbrirPestanaEditar(Id.ToString(),
                                                         typeof(ReciboHonorarios_Edita),
                                                         ref _tabControlPadre, _sesion);
            }
        }

        //Ver Documentos Relacionados
        private void ButtonF1_Click_6(object sender, RoutedEventArgs e)
        {
            WindowRelacion Relacion = new Elysium.Demo.WindowRelacion(Id, Documentos_Id.Doc_ReciboHonorariosVentas);
            Relacion.Owner = SIIE_ERP.View.NavegacionUI.GetParentWindow(this); Relacion.ShowDialog();
        }

        //Duplicar
        private void ButtonF1_Click_7(object sender, RoutedEventArgs e)
        {
            Documento_VentasHonorarios Doc_C = new Documento_VentasHonorarios(_sesion.RFC, _sesion.UserName);
            int Secuencia = Doc_C.Conversion(Id, Documentos_Id.Doc_ReciboHonorariosVentas, Documentos_Id.Doc_ReciboHonorariosVentas);

            if (Secuencia == -1)
            {
                MessageBox.Show("Error");
            }
            else
            {
                _tabControlPadre.Items.Remove(_tabItemPadre);
                SIIE_ERP.View.NavegacionUI.AbrirPestanaEditar(Secuencia.ToString(),
                                                         typeof(ReciboHonorarios_Edita),
                                                         ref _tabControlPadre, _sesion);
            }
        }

        //Imprimir
        private void ButtonF1_Click_8(object sender, RoutedEventArgs e)
        {
            var db = new SIIE_ERP.BaseDatos.Ventas.Transacciones.Documento_VentasHonorarios(_sesion.RFC, _sesion.UserName);
            var dato = db.Get_Documento_By_Id(SIIE_ERP.BaseDatos.Documentos_Id.Doc_ReciboHonorariosVentas, Id).Rows[0];
            
            if (FuncionesClass.ConsultaFE(_sesion.RFC) == 1 && Boolean.Parse(dato["Is_FE"].ToString()))
            {
                SIIE_ERP.View.NavegacionUI.AbrirPestanaNuevo(typeof(GenericReport_Impresiones),
                                                         ref _tabControlPadre, _sesion, "Informes/Reportes/RPT_ReciboHonorarios_Cliente_FE.rdlc", this.Id);
            }
            else
            {
                SIIE_ERP.View.NavegacionUI.AbrirPestanaNuevo(typeof(GenericReport_Impresiones),
                                                         ref _tabControlPadre, _sesion, "Informes/Reportes/RPT_ReciboHonorarios_Cliente.rdlc", this.Id);
            }
        }

        private void ButtonInformacion_Click_1(object sender, RoutedEventArgs e)
        {
            WindowAyuda Ayuda = new Elysium.Demo.WindowAyuda("ReciboHonorarios.htm", "Ayuda");
            Ayuda.Owner = SIIE_ERP.View.NavegacionUI.GetParentWindow(this); Ayuda.ShowDialog();
        }

        private void ButtonRegresar_Click_1(object sender, RoutedEventArgs e)
        {
            _tabControlPadre.Items.Remove(_tabItemPadre);
        }

        private void Button_Ajuste_Saldo_Click(object sender, RoutedEventArgs e)
        {
            if (Documentos_AjusteSaldo.InsertAjuste_Saldo(Id, Documentos_Id.Doc_ReciboHonorariosVentas).Id == 1)
            {
                MessageBox.Show("Ajuste de Saldo Realizado Correctamente");
                CargaDatos();
            }
            else
            {
                MessageBox.Show("ERROR!!!");
            }
        }
        public DateTime servicio()
        {
            try
            {
                var vencimiento = Convert.ToDateTime(WebServicesClass.fechaVencimiento(_sesion.RFC).ToString().Replace("|", "/"));
                return vencimiento;
            }
            catch (Exception)
            {
                return DateTime.Now;
            }
        }
    }
}
